package cn.ztc.tool.enums;

import java.lang.reflect.Type;

/**
 * 枚举接口工具类
 *
 * @param <E> 枚举类型
 * @param <V> 拓展字段值类型
 * @author 张天赐
 */
public interface BaseEnumInterface<E extends Enum<E>, V extends Comparable<V>> {

    /**
     * 获取拓展字段的值
     *
     * @return 拓展字段的值
     */
    V getValue();

    /**
     * 获取拓展字段的超类
     *
     * @return 拓展字段的类型
     */
    default Class<E> getActualTypeArgument() {
        Type[] actualTypeArguments = Util.getActualTypeArguments(this);
        if (actualTypeArguments.length > 0) {
            // 实际类型参数
            Type actualTypeArgument = actualTypeArguments[0];
            return (Class<E>)actualTypeArgument.getClass();
        } else {
            throw new RuntimeException("获取泛型超类失败.");
        }
    }
}
